[MINI-OS] Extend alloc_unbound so that the remote domain isn't always dom0.
authorsos22@douglas.cl.cam.ac.uk <sos22@douglas.cl.cam.ac.uk>
Fri, 28 Jul 2006 13:03:54 +0000 (14:03 +0100)
committersos22@douglas.cl.cam.ac.uk <sos22@douglas.cl.cam.ac.uk>
Fri, 28 Jul 2006 13:03:54 +0000 (14:03 +0100)
Signed-off-by: John D. Ramsdell <ramsdell@mitre.org>
Signed-off-by: Steven Smith <sos22@cam.ac.uk>
extras/mini-os/events.c
extras/mini-os/include/events.h

index 641c86cebaf15470f3c3ca03f22cd8e66b81aab9..dfc1206c2ec9074a0b41b88ac860e12d85e80d89 100644 (file)
@@ -141,25 +141,23 @@ void default_handler(evtchn_port_t port, struct pt_regs *regs, void *ignore)
     printk("[Port %d] - event received\n", port);
 }
 
+/* Create a port available to the pal for exchanging notifications.
+   Returns the result of the hypervisor call. */
+
 /* Unfortunate confusion of terminology: the port is unbound as far
    as Xen is concerned, but we automatically bind a handler to it
    from inside mini-os. */
-evtchn_port_t evtchn_alloc_unbound(evtchn_handler_t handler, void *data)
+
+int evtchn_alloc_unbound(domid_t pal, evtchn_handler_t handler,
+                                                void *data, evtchn_port_t *port)
 {
-       evtchn_port_t port;
-       evtchn_op_t op;
-       int err;
-
-       op.cmd = EVTCHNOP_alloc_unbound;
-       op.u.alloc_unbound.dom = DOMID_SELF;
-       op.u.alloc_unbound.remote_dom = 0;
-
-       err = HYPERVISOR_event_channel_op(&op);
-       if (err) {
-               printk("Failed to alloc unbound evtchn: %d.\n", err);
-               return -1;
-       }
-       port = op.u.alloc_unbound.port;
-       bind_evtchn(port, handler, data);
-       return port;
+    evtchn_op_t op;
+    op.cmd = EVTCHNOP_alloc_unbound;
+    op.u.alloc_unbound.dom = DOMID_SELF;
+    op.u.alloc_unbound.remote_dom = pal;
+    int err = HYPERVISOR_event_channel_op(&op);
+    if (err)
+               return err;
+    *port = bind_evtchn(op.u.alloc_unbound.port, handler, data);
+    return err;
 }
index 1ffcecb61b8002d587473940c6ac24adda0141ec..f0133621f87381bbfe50a089cffe1956eacdce79 100644 (file)
@@ -31,8 +31,8 @@ evtchn_port_t bind_evtchn(evtchn_port_t port, evtchn_handler_t handler,
                                                  void *data);
 void unbind_evtchn(evtchn_port_t port);
 void init_events(void);
-evtchn_port_t evtchn_alloc_unbound(evtchn_handler_t handler,
-                                                                  void *data);
+int evtchn_alloc_unbound(domid_t pal, evtchn_handler_t handler,
+                                                void *data, evtchn_port_t *port);
 
 static inline int notify_remote_via_evtchn(evtchn_port_t port)
 {